{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5c6f82af",
   "metadata": {},
   "source": [
    "# Check data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "51560d04",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.185044Z",
     "start_time": "2022-01-14T07:51:35.751209Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "train = pd.read_csv('train.csv')\n",
    "test = pd.read_csv('test.csv')\n",
    "test_id = test['PassengerId']\n",
    "test.drop(['PassengerId'], axis=1, inplace=True)\n",
    "train.drop(['PassengerId'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5469d1c9",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.216955Z",
     "start_time": "2022-01-14T07:51:36.187038Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass                                               Name  \\\n",
       "0         0       3                            Braund, Mr. Owen Harris   \n",
       "1         1       1  Cumings, Mrs. John Bradley (Florence Briggs Th...   \n",
       "2         1       3                             Heikkinen, Miss. Laina   \n",
       "3         1       1       Futrelle, Mrs. Jacques Heath (Lily May Peel)   \n",
       "4         0       3                           Allen, Mr. William Henry   \n",
       "\n",
       "      Sex   Age  SibSp  Parch            Ticket     Fare Cabin Embarked  \n",
       "0    male  22.0      1      0         A/5 21171   7.2500   NaN        S  \n",
       "1  female  38.0      1      0          PC 17599  71.2833   C85        C  \n",
       "2  female  26.0      0      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3  female  35.0      1      0            113803  53.1000  C123        S  \n",
       "4    male  35.0      0      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "13fd8e24",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.248869Z",
     "start_time": "2022-01-14T07:51:36.218950Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>714.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.383838</td>\n",
       "      <td>2.308642</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.486592</td>\n",
       "      <td>0.836071</td>\n",
       "      <td>14.526497</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.125000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>28.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>38.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Survived      Pclass         Age       SibSp       Parch        Fare\n",
       "count  891.000000  891.000000  714.000000  891.000000  891.000000  891.000000\n",
       "mean     0.383838    2.308642   29.699118    0.523008    0.381594   32.204208\n",
       "std      0.486592    0.836071   14.526497    1.102743    0.806057   49.693429\n",
       "min      0.000000    1.000000    0.420000    0.000000    0.000000    0.000000\n",
       "25%      0.000000    2.000000   20.125000    0.000000    0.000000    7.910400\n",
       "50%      0.000000    3.000000   28.000000    0.000000    0.000000   14.454200\n",
       "75%      1.000000    3.000000   38.000000    1.000000    0.000000   31.000000\n",
       "max      1.000000    3.000000   80.000000    8.000000    6.000000  512.329200"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "123121a8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.264826Z",
     "start_time": "2022-01-14T07:51:36.250864Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 11 columns):\n",
      " #   Column    Non-Null Count  Dtype  \n",
      "---  ------    --------------  -----  \n",
      " 0   Survived  891 non-null    int64  \n",
      " 1   Pclass    891 non-null    int64  \n",
      " 2   Name      891 non-null    object \n",
      " 3   Sex       891 non-null    object \n",
      " 4   Age       714 non-null    float64\n",
      " 5   SibSp     891 non-null    int64  \n",
      " 6   Parch     891 non-null    int64  \n",
      " 7   Ticket    891 non-null    object \n",
      " 8   Fare      891 non-null    float64\n",
      " 9   Cabin     204 non-null    object \n",
      " 10  Embarked  889 non-null    object \n",
      "dtypes: float64(2), int64(4), object(5)\n",
      "memory usage: 76.7+ KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "86eba28d",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.279786Z",
     "start_time": "2022-01-14T07:51:36.265824Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 418 entries, 0 to 417\n",
      "Data columns (total 10 columns):\n",
      " #   Column    Non-Null Count  Dtype  \n",
      "---  ------    --------------  -----  \n",
      " 0   Pclass    418 non-null    int64  \n",
      " 1   Name      418 non-null    object \n",
      " 2   Sex       418 non-null    object \n",
      " 3   Age       332 non-null    float64\n",
      " 4   SibSp     418 non-null    int64  \n",
      " 5   Parch     418 non-null    int64  \n",
      " 6   Ticket    418 non-null    object \n",
      " 7   Fare      417 non-null    float64\n",
      " 8   Cabin     91 non-null     object \n",
      " 9   Embarked  418 non-null    object \n",
      "dtypes: float64(2), int64(3), object(5)\n",
      "memory usage: 32.8+ KB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9650e7b6",
   "metadata": {},
   "source": [
    "# Process data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b2340d85",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.295743Z",
     "start_time": "2022-01-14T07:51:36.281786Z"
    }
   },
   "outputs": [],
   "source": [
    "def loss_rate(x):  # x is DataFrmae type\n",
    "    table = ((x.isnull().sum())/x.shape[0]).sort_values(ascending=False).map(lambda i:\"{:.2%}\".format(i))\n",
    "    return table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "9c3317d8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.311701Z",
     "start_time": "2022-01-14T07:51:36.297739Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Cabin       77.10%\n",
       "Age         19.87%\n",
       "Embarked     0.22%\n",
       "Survived     0.00%\n",
       "Pclass       0.00%\n",
       "Name         0.00%\n",
       "Sex          0.00%\n",
       "SibSp        0.00%\n",
       "Parch        0.00%\n",
       "Ticket       0.00%\n",
       "Fare         0.00%\n",
       "dtype: object"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "loss_rate(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "dbf79df2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.326660Z",
     "start_time": "2022-01-14T07:51:36.312700Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Cabin       78.23%\n",
       "Age         20.57%\n",
       "Fare         0.24%\n",
       "Pclass       0.00%\n",
       "Name         0.00%\n",
       "Sex          0.00%\n",
       "SibSp        0.00%\n",
       "Parch        0.00%\n",
       "Ticket       0.00%\n",
       "Embarked     0.00%\n",
       "dtype: object"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "loss_rate(test)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a32e725",
   "metadata": {},
   "source": [
    "## Cabin"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bacc1c4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-12T04:08:26.739655Z",
     "start_time": "2022-01-12T04:08:26.729682Z"
    }
   },
   "source": [
    "Process Cabin first. The Cabin data is far more less then other data, but I think that Cabin is still related to thier survival. Cause the Cabin types may related to thier economy condition and so on.\n",
    "\n",
    "I decide to drop the specific room number, only remain the cabin type."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "da473afb",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.342618Z",
     "start_time": "2022-01-14T07:51:36.327659Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "B96 B98        4\n",
       "G6             4\n",
       "C23 C25 C27    4\n",
       "C22 C26        3\n",
       "F33            3\n",
       "              ..\n",
       "E34            1\n",
       "C7             1\n",
       "C54            1\n",
       "E36            1\n",
       "C148           1\n",
       "Name: Cabin, Length: 147, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.Cabin.value_counts()\n",
    "# there are many multiple rooms info"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "61858e32",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.358617Z",
     "start_time": "2022-01-14T07:51:36.344613Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "ls = []\n",
    "for i in train.Cabin:\n",
    "    if i is np.nan:  # remain nan\n",
    "        ls.append(np.nan)\n",
    "    elif len(i.split()) > 1:  # remain mutiple rooms info, waiting further process\n",
    "        ls.append(i)\n",
    "    else:\n",
    "        ls.append(i[:1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "21ae6a5a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.373536Z",
     "start_time": "2022-01-14T07:51:36.359574Z"
    }
   },
   "outputs": [],
   "source": [
    "train.Cabin = ls"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "4d4500d7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.389493Z",
     "start_time": "2022-01-14T07:51:36.374534Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "C                  51\n",
       "B                  36\n",
       "D                  32\n",
       "E                  32\n",
       "A                  15\n",
       "F                   9\n",
       "G                   4\n",
       "C23 C25 C27         4\n",
       "B96 B98             4\n",
       "C22 C26             3\n",
       "B51 B53 B55         2\n",
       "B57 B59 B63 B66     2\n",
       "B58 B60             2\n",
       "F G73               2\n",
       "F E69               1\n",
       "T                   1\n",
       "D10 D12             1\n",
       "F G63               1\n",
       "C62 C64             1\n",
       "B82 B84             1\n",
       "Name: Cabin, dtype: int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.Cabin.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "220e74db",
   "metadata": {},
   "source": [
    "Multiple rooms are in same type cabin, so I will merge them, \"C23 C25 C27\" to \"C\".  \n",
    "\n",
    "There are some special info such as \"F G73\" and \"T\", I think that is special cabin for crews or captain or some kinds of people. In test.csv, Cabin categories contain \"ABCDEFG\" and \"F E\", \"F G\", without \"T\", so we need to merge all data but \"T\"(delete).  \n",
    "\n",
    "As for NaN data, turn it to U('Unknow')."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2c0dfee5",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.405451Z",
     "start_time": "2022-01-14T07:51:36.390491Z"
    }
   },
   "outputs": [],
   "source": [
    "ls = []\n",
    "for i in train.Cabin:\n",
    "    if i is np.nan:  # remain nan\n",
    "        ls.append('U')\n",
    "    elif i[:3] in [\"F E\", \"F G\"]:\n",
    "        ls.append(i[:3].replace(' ',''))  # remove blank\n",
    "    else:\n",
    "        ls.append(i[:1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "b2bc5980",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.421407Z",
     "start_time": "2022-01-14T07:51:36.406448Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "U     687\n",
       "C      59\n",
       "B      47\n",
       "D      33\n",
       "E      32\n",
       "A      15\n",
       "F       9\n",
       "G       4\n",
       "FG      3\n",
       "FE      1\n",
       "Name: Cabin, dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.Cabin = ls\n",
    "train.drop(train[train.Cabin == 'T'].index, inplace=True)  # delete \"T\"\n",
    "train.Cabin.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79a56852",
   "metadata": {},
   "source": [
    "All right!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "e1a7f5d9",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.437365Z",
     "start_time": "2022-01-14T07:51:36.422406Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass                                               Name  \\\n",
       "0         0       3                            Braund, Mr. Owen Harris   \n",
       "1         1       1  Cumings, Mrs. John Bradley (Florence Briggs Th...   \n",
       "2         1       3                             Heikkinen, Miss. Laina   \n",
       "3         1       1       Futrelle, Mrs. Jacques Heath (Lily May Peel)   \n",
       "4         0       3                           Allen, Mr. William Henry   \n",
       "\n",
       "      Sex   Age  SibSp  Parch            Ticket     Fare Cabin Embarked  \n",
       "0    male  22.0      1      0         A/5 21171   7.2500     U        S  \n",
       "1  female  38.0      1      0          PC 17599  71.2833     C        C  \n",
       "2  female  26.0      0      0  STON/O2. 3101282   7.9250     U        S  \n",
       "3  female  35.0      1      0            113803  53.1000     C        S  \n",
       "4    male  35.0      0      0            373450   8.0500     U        S  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "63cddedd",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.453322Z",
     "start_time": "2022-01-14T07:51:36.438363Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Survived</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.340458</td>\n",
       "      <td>-0.076094</td>\n",
       "      <td>-0.035760</td>\n",
       "      <td>0.081248</td>\n",
       "      <td>0.257456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass</th>\n",
       "      <td>-0.340458</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.367893</td>\n",
       "      <td>0.082370</td>\n",
       "      <td>0.017636</td>\n",
       "      <td>-0.550143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Age</th>\n",
       "      <td>-0.076094</td>\n",
       "      <td>-0.367893</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.307737</td>\n",
       "      <td>-0.188552</td>\n",
       "      <td>0.096119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SibSp</th>\n",
       "      <td>-0.035760</td>\n",
       "      <td>0.082370</td>\n",
       "      <td>-0.307737</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.414690</td>\n",
       "      <td>0.159707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Parch</th>\n",
       "      <td>0.081248</td>\n",
       "      <td>0.017636</td>\n",
       "      <td>-0.188552</td>\n",
       "      <td>0.414690</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.216288</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fare</th>\n",
       "      <td>0.257456</td>\n",
       "      <td>-0.550143</td>\n",
       "      <td>0.096119</td>\n",
       "      <td>0.159707</td>\n",
       "      <td>0.216288</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Survived    Pclass       Age     SibSp     Parch      Fare\n",
       "Survived  1.000000 -0.340458 -0.076094 -0.035760  0.081248  0.257456\n",
       "Pclass   -0.340458  1.000000 -0.367893  0.082370  0.017636 -0.550143\n",
       "Age      -0.076094 -0.367893  1.000000 -0.307737 -0.188552  0.096119\n",
       "SibSp    -0.035760  0.082370 -0.307737  1.000000  0.414690  0.159707\n",
       "Parch     0.081248  0.017636 -0.188552  0.414690  1.000000  0.216288\n",
       "Fare      0.257456 -0.550143  0.096119  0.159707  0.216288  1.000000"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "93915d48",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.469280Z",
     "start_time": "2022-01-14T07:51:36.454319Z"
    }
   },
   "outputs": [],
   "source": [
    "train.reset_index(inplace=True, drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "0dbb967c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.500197Z",
     "start_time": "2022-01-14T07:51:36.470278Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>885</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Graham, Miss. Margaret Edith</td>\n",
       "      <td>female</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>B</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Behr, Mr. Karl Howell</td>\n",
       "      <td>male</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>C</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>U</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>890 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Survived  Pclass                                               Name  \\\n",
       "0           0       3                            Braund, Mr. Owen Harris   \n",
       "1           1       1  Cumings, Mrs. John Bradley (Florence Briggs Th...   \n",
       "2           1       3                             Heikkinen, Miss. Laina   \n",
       "3           1       1       Futrelle, Mrs. Jacques Heath (Lily May Peel)   \n",
       "4           0       3                           Allen, Mr. William Henry   \n",
       "..        ...     ...                                                ...   \n",
       "885         0       2                              Montvila, Rev. Juozas   \n",
       "886         1       1                       Graham, Miss. Margaret Edith   \n",
       "887         0       3           Johnston, Miss. Catherine Helen \"Carrie\"   \n",
       "888         1       1                              Behr, Mr. Karl Howell   \n",
       "889         0       3                                Dooley, Mr. Patrick   \n",
       "\n",
       "        Sex   Age  SibSp  Parch            Ticket     Fare Cabin Embarked  \n",
       "0      male  22.0      1      0         A/5 21171   7.2500     U        S  \n",
       "1    female  38.0      1      0          PC 17599  71.2833     C        C  \n",
       "2    female  26.0      0      0  STON/O2. 3101282   7.9250     U        S  \n",
       "3    female  35.0      1      0            113803  53.1000     C        S  \n",
       "4      male  35.0      0      0            373450   8.0500     U        S  \n",
       "..      ...   ...    ...    ...               ...      ...   ...      ...  \n",
       "885    male  27.0      0      0            211536  13.0000     U        S  \n",
       "886  female  19.0      0      0            112053  30.0000     B        S  \n",
       "887  female   NaN      1      2        W./C. 6607  23.4500     U        S  \n",
       "888    male  26.0      0      0            111369  30.0000     C        C  \n",
       "889    male  32.0      0      0            370376   7.7500     U        Q  \n",
       "\n",
       "[890 rows x 11 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "370dddb1",
   "metadata": {},
   "source": [
    "## Ticket"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b240bf12",
   "metadata": {},
   "source": [
    "I don't think that ticket related to thier survival, so I just delete this atrribute."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "609a1e73",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.516156Z",
     "start_time": "2022-01-14T07:51:36.501195Z"
    }
   },
   "outputs": [],
   "source": [
    "train.drop(['Ticket'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "81c7d81f",
   "metadata": {},
   "source": [
    "## Name"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "233b3bbc",
   "metadata": {},
   "source": [
    "I don't think that name related to survival."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "ef21a050",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.532112Z",
     "start_time": "2022-01-14T07:51:36.517153Z"
    }
   },
   "outputs": [],
   "source": [
    "train.drop(['Name'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "1ea113d9",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.547072Z",
     "start_time": "2022-01-14T07:51:36.533110Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived  Pclass     Sex   Age  SibSp  Parch     Fare Cabin Embarked\n",
       "0         0       3    male  22.0      1      0   7.2500     U        S\n",
       "1         1       1  female  38.0      1      0  71.2833     C        C\n",
       "2         1       3  female  26.0      0      0   7.9250     U        S\n",
       "3         1       1  female  35.0      1      0  53.1000     C        S\n",
       "4         0       3    male  35.0      0      0   8.0500     U        S"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a554799f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:36.563030Z",
     "start_time": "2022-01-14T07:51:36.549067Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 890 entries, 0 to 889\n",
      "Data columns (total 9 columns):\n",
      " #   Column    Non-Null Count  Dtype  \n",
      "---  ------    --------------  -----  \n",
      " 0   Survived  890 non-null    int64  \n",
      " 1   Pclass    890 non-null    int64  \n",
      " 2   Sex       890 non-null    object \n",
      " 3   Age       713 non-null    float64\n",
      " 4   SibSp     890 non-null    int64  \n",
      " 5   Parch     890 non-null    int64  \n",
      " 6   Fare      890 non-null    float64\n",
      " 7   Cabin     890 non-null    object \n",
      " 8   Embarked  888 non-null    object \n",
      "dtypes: float64(2), int64(4), object(3)\n",
      "memory usage: 62.7+ KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62c89d23",
   "metadata": {},
   "source": [
    "## Age"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "e23a053b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.024836Z",
     "start_time": "2022-01-14T07:51:36.564027Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train.Age.hist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "22d6f7e6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.040794Z",
     "start_time": "2022-01-14T07:51:37.025793Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    713.000000\n",
       "mean      29.677658\n",
       "std       14.525365\n",
       "min        0.420000\n",
       "25%       20.000000\n",
       "50%       28.000000\n",
       "75%       38.000000\n",
       "max       80.000000\n",
       "Name: Age, dtype: float64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.Age.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a692215c",
   "metadata": {},
   "source": [
    "I think the missing values should be filled with the average."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "afc807e6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.056710Z",
     "start_time": "2022-01-14T07:51:37.041749Z"
    }
   },
   "outputs": [],
   "source": [
    "train.Age.fillna(train.Age.mean(), inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "b1fe86b6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.072669Z",
     "start_time": "2022-01-14T07:51:37.057706Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    890.000000\n",
       "mean      29.677658\n",
       "std       12.999186\n",
       "min        0.420000\n",
       "25%       22.000000\n",
       "50%       29.677658\n",
       "75%       35.000000\n",
       "max       80.000000\n",
       "Name: Age, dtype: float64"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.Age.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "93cb0fe3",
   "metadata": {},
   "source": [
    "## Embarked"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "878cdc3b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.088625Z",
     "start_time": "2022-01-14T07:51:37.073666Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "S    643\n",
       "C    168\n",
       "Q     77\n",
       "Name: Embarked, dtype: int64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.Embarked.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c18fe355",
   "metadata": {},
   "source": [
    "It has no special value. I will not process this attribute, cause one-hot encoder will group them together."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "938016a0",
   "metadata": {},
   "source": [
    "## Standardization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "b951fea6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.104581Z",
     "start_time": "2022-01-14T07:51:37.092652Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 890 entries, 0 to 889\n",
      "Data columns (total 9 columns):\n",
      " #   Column    Non-Null Count  Dtype  \n",
      "---  ------    --------------  -----  \n",
      " 0   Survived  890 non-null    int64  \n",
      " 1   Pclass    890 non-null    int64  \n",
      " 2   Sex       890 non-null    object \n",
      " 3   Age       890 non-null    float64\n",
      " 4   SibSp     890 non-null    int64  \n",
      " 5   Parch     890 non-null    int64  \n",
      " 6   Fare      890 non-null    float64\n",
      " 7   Cabin     890 non-null    object \n",
      " 8   Embarked  888 non-null    object \n",
      "dtypes: float64(2), int64(4), object(3)\n",
      "memory usage: 62.7+ KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "0125b891",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.120579Z",
     "start_time": "2022-01-14T07:51:37.105579Z"
    }
   },
   "outputs": [],
   "source": [
    "attrs_cat = ['Survived', 'Sex', 'Cabin', 'Embarked']\n",
    "x_cat = train[attrs_cat]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "1327050e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.566383Z",
     "start_time": "2022-01-14T07:51:37.121575Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "attrs_num = ['Pclass', 'Age', 'SibSp' ,'Parch', 'Fare']\n",
    "scl = StandardScaler()\n",
    "x_num = pd.DataFrame(scl.fit_transform(train[attrs_num]), columns=attrs_num)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "d00b0230",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.582344Z",
     "start_time": "2022-01-14T07:51:37.567347Z"
    }
   },
   "outputs": [],
   "source": [
    "x = pd.concat([x_cat, x_num], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "a0c9b7fc",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.598263Z",
     "start_time": "2022-01-14T07:51:37.584335Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 890 entries, 0 to 889\n",
      "Data columns (total 9 columns):\n",
      " #   Column    Non-Null Count  Dtype  \n",
      "---  ------    --------------  -----  \n",
      " 0   Survived  890 non-null    int64  \n",
      " 1   Sex       890 non-null    object \n",
      " 2   Cabin     890 non-null    object \n",
      " 3   Embarked  888 non-null    object \n",
      " 4   Pclass    890 non-null    float64\n",
      " 5   Age       890 non-null    float64\n",
      " 6   SibSp     890 non-null    float64\n",
      " 7   Parch     890 non-null    float64\n",
      " 8   Fare      890 non-null    float64\n",
      "dtypes: float64(5), int64(1), object(3)\n",
      "memory usage: 62.7+ KB\n"
     ]
    }
   ],
   "source": [
    "x.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d29aae0",
   "metadata": {},
   "source": [
    "## One-hot encoding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "cc7fc6ca",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.614262Z",
     "start_time": "2022-01-14T07:51:37.599265Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 890 entries, 0 to 889\n",
      "Data columns (total 21 columns):\n",
      " #   Column      Non-Null Count  Dtype  \n",
      "---  ------      --------------  -----  \n",
      " 0   Survived    890 non-null    int64  \n",
      " 1   Pclass      890 non-null    float64\n",
      " 2   Age         890 non-null    float64\n",
      " 3   SibSp       890 non-null    float64\n",
      " 4   Parch       890 non-null    float64\n",
      " 5   Fare        890 non-null    float64\n",
      " 6   Sex_female  890 non-null    uint8  \n",
      " 7   Sex_male    890 non-null    uint8  \n",
      " 8   Cabin_A     890 non-null    uint8  \n",
      " 9   Cabin_B     890 non-null    uint8  \n",
      " 10  Cabin_C     890 non-null    uint8  \n",
      " 11  Cabin_D     890 non-null    uint8  \n",
      " 12  Cabin_E     890 non-null    uint8  \n",
      " 13  Cabin_F     890 non-null    uint8  \n",
      " 14  Cabin_FE    890 non-null    uint8  \n",
      " 15  Cabin_FG    890 non-null    uint8  \n",
      " 16  Cabin_G     890 non-null    uint8  \n",
      " 17  Cabin_U     890 non-null    uint8  \n",
      " 18  Embarked_C  890 non-null    uint8  \n",
      " 19  Embarked_Q  890 non-null    uint8  \n",
      " 20  Embarked_S  890 non-null    uint8  \n",
      "dtypes: float64(5), int64(1), uint8(15)\n",
      "memory usage: 54.9 KB\n"
     ]
    }
   ],
   "source": [
    "pd.get_dummies(x).info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "e790eab6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.630177Z",
     "start_time": "2022-01-14T07:51:37.615219Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "      <td>0.826293</td>\n",
       "      <td>-5.909581e-01</td>\n",
       "      <td>0.432072</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.502090</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>C</td>\n",
       "      <td>C</td>\n",
       "      <td>-1.569150</td>\n",
       "      <td>6.405802e-01</td>\n",
       "      <td>0.432072</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>0.786480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "      <td>0.826293</td>\n",
       "      <td>-2.830735e-01</td>\n",
       "      <td>-0.474872</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.488507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>C</td>\n",
       "      <td>S</td>\n",
       "      <td>-1.569150</td>\n",
       "      <td>4.096668e-01</td>\n",
       "      <td>0.432072</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>0.420570</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "      <td>0.826293</td>\n",
       "      <td>4.096668e-01</td>\n",
       "      <td>-0.474872</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.485991</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>885</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "      <td>-0.371428</td>\n",
       "      <td>-2.061024e-01</td>\n",
       "      <td>-0.474872</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.386380</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>B</td>\n",
       "      <td>S</td>\n",
       "      <td>-1.569150</td>\n",
       "      <td>-8.218716e-01</td>\n",
       "      <td>-0.474872</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.044282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>0</td>\n",
       "      <td>female</td>\n",
       "      <td>U</td>\n",
       "      <td>S</td>\n",
       "      <td>0.826293</td>\n",
       "      <td>-2.734564e-16</td>\n",
       "      <td>0.432072</td>\n",
       "      <td>2.007527</td>\n",
       "      <td>-0.176090</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>C</td>\n",
       "      <td>C</td>\n",
       "      <td>-1.569150</td>\n",
       "      <td>-2.830735e-01</td>\n",
       "      <td>-0.474872</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.044282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>0</td>\n",
       "      <td>male</td>\n",
       "      <td>U</td>\n",
       "      <td>Q</td>\n",
       "      <td>0.826293</td>\n",
       "      <td>1.787533e-01</td>\n",
       "      <td>-0.474872</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.492028</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>890 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Survived     Sex Cabin Embarked    Pclass           Age     SibSp  \\\n",
       "0           0    male     U        S  0.826293 -5.909581e-01  0.432072   \n",
       "1           1  female     C        C -1.569150  6.405802e-01  0.432072   \n",
       "2           1  female     U        S  0.826293 -2.830735e-01 -0.474872   \n",
       "3           1  female     C        S -1.569150  4.096668e-01  0.432072   \n",
       "4           0    male     U        S  0.826293  4.096668e-01 -0.474872   \n",
       "..        ...     ...   ...      ...       ...           ...       ...   \n",
       "885         0    male     U        S -0.371428 -2.061024e-01 -0.474872   \n",
       "886         1  female     B        S -1.569150 -8.218716e-01 -0.474872   \n",
       "887         0  female     U        S  0.826293 -2.734564e-16  0.432072   \n",
       "888         1    male     C        C -1.569150 -2.830735e-01 -0.474872   \n",
       "889         0    male     U        Q  0.826293  1.787533e-01 -0.474872   \n",
       "\n",
       "        Parch      Fare  \n",
       "0   -0.473999 -0.502090  \n",
       "1   -0.473999  0.786480  \n",
       "2   -0.473999 -0.488507  \n",
       "3   -0.473999  0.420570  \n",
       "4   -0.473999 -0.485991  \n",
       "..        ...       ...  \n",
       "885 -0.473999 -0.386380  \n",
       "886 -0.473999 -0.044282  \n",
       "887  2.007527 -0.176090  \n",
       "888 -0.473999 -0.044282  \n",
       "889 -0.473999 -0.492028  \n",
       "\n",
       "[890 rows x 9 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "8f3d835c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.646168Z",
     "start_time": "2022-01-14T07:51:37.631179Z"
    }
   },
   "outputs": [],
   "source": [
    "x = pd.get_dummies(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "dceec3a2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.662126Z",
     "start_time": "2022-01-14T07:51:37.647133Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Sex_female</th>\n",
       "      <th>Sex_male</th>\n",
       "      <th>Cabin_A</th>\n",
       "      <th>Cabin_B</th>\n",
       "      <th>...</th>\n",
       "      <th>Cabin_D</th>\n",
       "      <th>Cabin_E</th>\n",
       "      <th>Cabin_F</th>\n",
       "      <th>Cabin_FE</th>\n",
       "      <th>Cabin_FG</th>\n",
       "      <th>Cabin_G</th>\n",
       "      <th>Cabin_U</th>\n",
       "      <th>Embarked_C</th>\n",
       "      <th>Embarked_Q</th>\n",
       "      <th>Embarked_S</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0.826293</td>\n",
       "      <td>-0.590958</td>\n",
       "      <td>0.432072</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.502090</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>-1.569150</td>\n",
       "      <td>0.640580</td>\n",
       "      <td>0.432072</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>0.786480</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0.826293</td>\n",
       "      <td>-0.283074</td>\n",
       "      <td>-0.474872</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.488507</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>-1.569150</td>\n",
       "      <td>0.409667</td>\n",
       "      <td>0.432072</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>0.420570</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0.826293</td>\n",
       "      <td>0.409667</td>\n",
       "      <td>-0.474872</td>\n",
       "      <td>-0.473999</td>\n",
       "      <td>-0.485991</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 21 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Survived    Pclass       Age     SibSp     Parch      Fare  Sex_female  \\\n",
       "0         0  0.826293 -0.590958  0.432072 -0.473999 -0.502090           0   \n",
       "1         1 -1.569150  0.640580  0.432072 -0.473999  0.786480           1   \n",
       "2         1  0.826293 -0.283074 -0.474872 -0.473999 -0.488507           1   \n",
       "3         1 -1.569150  0.409667  0.432072 -0.473999  0.420570           1   \n",
       "4         0  0.826293  0.409667 -0.474872 -0.473999 -0.485991           0   \n",
       "\n",
       "   Sex_male  Cabin_A  Cabin_B  ...  Cabin_D  Cabin_E  Cabin_F  Cabin_FE  \\\n",
       "0         1        0        0  ...        0        0        0         0   \n",
       "1         0        0        0  ...        0        0        0         0   \n",
       "2         0        0        0  ...        0        0        0         0   \n",
       "3         0        0        0  ...        0        0        0         0   \n",
       "4         1        0        0  ...        0        0        0         0   \n",
       "\n",
       "   Cabin_FG  Cabin_G  Cabin_U  Embarked_C  Embarked_Q  Embarked_S  \n",
       "0         0        0        1           0           0           1  \n",
       "1         0        0        0           1           0           0  \n",
       "2         0        0        1           0           0           1  \n",
       "3         0        0        0           0           0           1  \n",
       "4         0        0        1           0           0           1  \n",
       "\n",
       "[5 rows x 21 columns]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb99a152",
   "metadata": {},
   "source": [
    "Train set finished."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "321dc51c",
   "metadata": {},
   "source": [
    "# Test_set converter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "3f6a218a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.678091Z",
     "start_time": "2022-01-14T07:51:37.663089Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.base import BaseEstimator, TransformerMixin\n",
    "class process(BaseEstimator, TransformerMixin):\n",
    "    def __init__(self):\n",
    "        pass\n",
    "    def fit(self, X, y=None):\n",
    "        return self\n",
    "    def transform(self, X):\n",
    "        ls = []\n",
    "        for i in X.Cabin:\n",
    "            if i is np.nan:  # remain nan\n",
    "                ls.append('U')\n",
    "            elif i[:3] in [\"F E\", \"F G\"]:\n",
    "                ls.append(i[:3].replace(' ',''))  # remove blank\n",
    "            else:\n",
    "                ls.append(i[:1])\n",
    "        X.Cabin = ls\n",
    "        X.drop(['Ticket'], axis=1, inplace=True)\n",
    "        X.drop(['Name'], axis=1, inplace=True)\n",
    "        X.Age.fillna(train.Age.mean(), inplace=True)\n",
    "        \n",
    "        attrs_cat = ['Sex', 'Cabin', 'Embarked']\n",
    "        X_cat = X[attrs_cat]\n",
    "        attrs_num = ['Pclass', 'Age', 'SibSp' ,'Parch', 'Fare']\n",
    "        scl = StandardScaler()\n",
    "        X_num = pd.DataFrame(scl.fit_transform(X[attrs_num]), columns=attrs_num)\n",
    "        X = pd.concat([X_cat, X_num], axis=1)\n",
    "\n",
    "        X = pd.get_dummies(X)\n",
    "        return X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "d7c2e068",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.709965Z",
     "start_time": "2022-01-14T07:51:37.679048Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>Kelly, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>3</td>\n",
       "      <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
       "      <td>female</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>Myles, Mr. Thomas Francis</td>\n",
       "      <td>male</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>Wirz, Mr. Albert</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
       "      <td>female</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>413</th>\n",
       "      <td>3</td>\n",
       "      <td>Spector, Mr. Woolf</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>A.5. 3236</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>414</th>\n",
       "      <td>1</td>\n",
       "      <td>Oliva y Ocana, Dona. Fermina</td>\n",
       "      <td>female</td>\n",
       "      <td>39.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17758</td>\n",
       "      <td>108.9000</td>\n",
       "      <td>C105</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>415</th>\n",
       "      <td>3</td>\n",
       "      <td>Saether, Mr. Simon Sivertsen</td>\n",
       "      <td>male</td>\n",
       "      <td>38.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>SOTON/O.Q. 3101262</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>416</th>\n",
       "      <td>3</td>\n",
       "      <td>Ware, Mr. Frederick</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>359309</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>417</th>\n",
       "      <td>3</td>\n",
       "      <td>Peter, Master. Michael J</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>2668</td>\n",
       "      <td>22.3583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>418 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Pclass                                          Name     Sex   Age  \\\n",
       "0         3                              Kelly, Mr. James    male  34.5   \n",
       "1         3              Wilkes, Mrs. James (Ellen Needs)  female  47.0   \n",
       "2         2                     Myles, Mr. Thomas Francis    male  62.0   \n",
       "3         3                              Wirz, Mr. Albert    male  27.0   \n",
       "4         3  Hirvonen, Mrs. Alexander (Helga E Lindqvist)  female  22.0   \n",
       "..      ...                                           ...     ...   ...   \n",
       "413       3                            Spector, Mr. Woolf    male   NaN   \n",
       "414       1                  Oliva y Ocana, Dona. Fermina  female  39.0   \n",
       "415       3                  Saether, Mr. Simon Sivertsen    male  38.5   \n",
       "416       3                           Ware, Mr. Frederick    male   NaN   \n",
       "417       3                      Peter, Master. Michael J    male   NaN   \n",
       "\n",
       "     SibSp  Parch              Ticket      Fare Cabin Embarked  \n",
       "0        0      0              330911    7.8292   NaN        Q  \n",
       "1        1      0              363272    7.0000   NaN        S  \n",
       "2        0      0              240276    9.6875   NaN        Q  \n",
       "3        0      0              315154    8.6625   NaN        S  \n",
       "4        1      1             3101298   12.2875   NaN        S  \n",
       "..     ...    ...                 ...       ...   ...      ...  \n",
       "413      0      0           A.5. 3236    8.0500   NaN        S  \n",
       "414      0      0            PC 17758  108.9000  C105        C  \n",
       "415      0      0  SOTON/O.Q. 3101262    7.2500   NaN        S  \n",
       "416      0      0              359309    8.0500   NaN        S  \n",
       "417      1      1                2668   22.3583   NaN        C  \n",
       "\n",
       "[418 rows x 10 columns]"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "390f2579",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.725962Z",
     "start_time": "2022-01-14T07:51:37.710962Z"
    }
   },
   "outputs": [],
   "source": [
    "processor = process()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "b159df60",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.741920Z",
     "start_time": "2022-01-14T07:51:37.726921Z"
    }
   },
   "outputs": [],
   "source": [
    "y_copy = test.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "9fde210c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.757870Z",
     "start_time": "2022-01-14T07:51:37.742902Z"
    }
   },
   "outputs": [],
   "source": [
    "y_pre = processor.fit_transform(y_copy)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d023687",
   "metadata": {},
   "source": [
    "# Machine Learning"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06538cb8",
   "metadata": {},
   "source": [
    "## Prepare data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "5d8f82c6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.773794Z",
     "start_time": "2022-01-14T07:51:37.758834Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 890 entries, 0 to 889\n",
      "Data columns (total 21 columns):\n",
      " #   Column      Non-Null Count  Dtype  \n",
      "---  ------      --------------  -----  \n",
      " 0   Survived    890 non-null    int64  \n",
      " 1   Pclass      890 non-null    float64\n",
      " 2   Age         890 non-null    float64\n",
      " 3   SibSp       890 non-null    float64\n",
      " 4   Parch       890 non-null    float64\n",
      " 5   Fare        890 non-null    float64\n",
      " 6   Sex_female  890 non-null    uint8  \n",
      " 7   Sex_male    890 non-null    uint8  \n",
      " 8   Cabin_A     890 non-null    uint8  \n",
      " 9   Cabin_B     890 non-null    uint8  \n",
      " 10  Cabin_C     890 non-null    uint8  \n",
      " 11  Cabin_D     890 non-null    uint8  \n",
      " 12  Cabin_E     890 non-null    uint8  \n",
      " 13  Cabin_F     890 non-null    uint8  \n",
      " 14  Cabin_FE    890 non-null    uint8  \n",
      " 15  Cabin_FG    890 non-null    uint8  \n",
      " 16  Cabin_G     890 non-null    uint8  \n",
      " 17  Cabin_U     890 non-null    uint8  \n",
      " 18  Embarked_C  890 non-null    uint8  \n",
      " 19  Embarked_Q  890 non-null    uint8  \n",
      " 20  Embarked_S  890 non-null    uint8  \n",
      "dtypes: float64(5), int64(1), uint8(15)\n",
      "memory usage: 54.9 KB\n"
     ]
    }
   ],
   "source": [
    "x.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "4f836483",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.805749Z",
     "start_time": "2022-01-14T07:51:37.774830Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "x_train, x_test = train_test_split(x, test_size = 0.2, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "53d87d65",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.821707Z",
     "start_time": "2022-01-14T07:51:37.806712Z"
    }
   },
   "outputs": [],
   "source": [
    "x_pre = x_train.drop(['Survived'], axis=1)\n",
    "x_labels = x_train['Survived']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9de6b4c",
   "metadata": {},
   "source": [
    "## LogisticRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "62ef5b5a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.884497Z",
     "start_time": "2022-01-14T07:51:37.822663Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression(max_iter=10000)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "logic_reg = LogisticRegression(solver='lbfgs', max_iter=10000)\n",
    "logic_reg.fit(x_pre, x_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "d6827238",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.900455Z",
     "start_time": "2022-01-14T07:51:37.885496Z"
    }
   },
   "outputs": [],
   "source": [
    "x_predict = logic_reg.predict(x_pre)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3952e51",
   "metadata": {},
   "source": [
    "### Confusion matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "3bf74e90",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:37.915414Z",
     "start_time": "2022-01-14T07:51:37.901453Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[392,  58],\n",
       "       [ 80, 182]], dtype=int64)"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "confusion_matrix(x_labels, x_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a27ff561",
   "metadata": {},
   "source": [
    "### K-fold cross validation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "aa105551",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:38.137820Z",
     "start_time": "2022-01-14T07:51:37.916413Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.77777778, 0.875     , 0.74647887, 0.84507042, 0.85915493,\n",
       "       0.78873239, 0.70422535, 0.73239437, 0.78873239, 0.81690141])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "cross_val_score(logic_reg, x_pre, x_labels, cv=10, scoring='accuracy')  # 10折交叉验证"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95371c18",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "48e9403f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:38.377181Z",
     "start_time": "2022-01-14T07:51:38.138818Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from sklearn.model_selection import cross_val_predict\n",
    "y_logic_scores = cross_val_predict(logic_reg, x_pre, x_labels, cv=5, method='decision_function')  \n",
    "from sklearn.metrics import precision_recall_curve\n",
    "precisions_logic, recalls_logic, thresholds_logic = precision_recall_curve(x_labels, y_logic_scores)\n",
    "def plot_precision_recall_vs_threshold(precisions, recalls, thresholds):\n",
    "    plt.plot(thresholds, precisions[:-1], 'b--', label='precision')\n",
    "    plt.plot(thresholds, recalls[:-1], 'g-', label='recall')\n",
    "    plt.xlabel('threshold')\n",
    "    plt.legend()\n",
    "    plt.grid()\n",
    "    plt.title('PR curve')\n",
    "    plt.show()\n",
    "plot_precision_recall_vs_threshold(precisions_logic, recalls_logic, thresholds_logic)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d31952fa",
   "metadata": {},
   "source": [
    "### ROC curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "fae82156",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:38.393140Z",
     "start_time": "2022-01-14T07:51:38.378178Z"
    }
   },
   "outputs": [],
   "source": [
    "def plot_roc_curve(fpr, tpr, label=None):\n",
    "    plt.plot(fpr, tpr, linewidth=2, label=label)\n",
    "    plt.plot([0, 1],[0, 1], 'k--')  \n",
    "    plt.xlabel('FPR')\n",
    "    plt.ylabel('TPR')\n",
    "    plt.title('ROC')\n",
    "    plt.legend()\n",
    "    plt.grid()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "45908dfa",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:38.409096Z",
     "start_time": "2022-01-14T07:51:38.395133Z"
    }
   },
   "outputs": [],
   "source": [
    "x_scores = logic_reg.decision_function(x_pre)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "1d5788c4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:38.425053Z",
     "start_time": "2022-01-14T07:51:38.411091Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import roc_curve\n",
    "fpr, tpr, thresholds = roc_curve(x_labels, x_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "fcb6d68f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:38.552713Z",
     "start_time": "2022-01-14T07:51:38.426051Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_roc_curve(fpr, tpr, 'Logic')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "4a732a21",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:38.568671Z",
     "start_time": "2022-01-14T07:51:38.553709Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8476759966072944"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_auc_score\n",
    "roc_auc_score(x_labels, x_scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9ba17d4",
   "metadata": {},
   "source": [
    "I think it's ok."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0400a728",
   "metadata": {},
   "source": [
    "## RandomForest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "6106a24e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.427679Z",
     "start_time": "2022-01-14T07:51:38.570664Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "forest_clf = RandomForestClassifier()\n",
    "forest_clf.fit(x_pre, x_labels)\n",
    "x_probas_forest = cross_val_predict(forest_clf, x_pre, x_labels, cv=5, method='predict_proba')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "b19bc58a",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.443593Z",
     "start_time": "2022-01-14T07:51:39.428373Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.62      , 0.38      ],\n",
       "       [0.94      , 0.06      ],\n",
       "       [0.815     , 0.185     ],\n",
       "       ...,\n",
       "       [0.84766667, 0.15233333],\n",
       "       [0.85      , 0.15      ],\n",
       "       [0.37      , 0.63      ]])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_probas_forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "b340aa6e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.459290Z",
     "start_time": "2022-01-14T07:51:39.445327Z"
    }
   },
   "outputs": [],
   "source": [
    "x_scores_forest = x_probas_forest[:, 1]\n",
    "fpr_forest, tpr_forest, threshold = roc_curve(x_labels, x_scores_forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "7f4e14e5",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.569994Z",
     "start_time": "2022-01-14T07:51:39.460287Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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vJPtcz/66CO8vLzYt28fAJcvX87d34UQ4kYpKTBiBEnOrlysXo+IcxGkT/8RXEqBX1VSm7TjwpzfCdsVTljMGc64NubMh8s489lGklLSwas1dG4N66/ObntDpHFVnIujnfEh7+1G2eLGh3zmn96ulPJ0wd4u+4snYmNj0akp4GDPO++8wxtvvEG7du1s/tdhs0SglPoRCAJ8lVJhwEjAEUBrPQ1YDjwEHAUSgF62isUM0dHRREVFZU719OzZk6eeeoqoqChiY2Np3rw5AM8//zxLly694fmrVq1i3rx5mdve3t75E7gQhUlyMuzYAQEBxhe2pCTYtYvkygGEu3pxITyai3sOcaGYLxfSHbiwfisXL8dxoVwAF0b9TvSlFPg8Yz7+hc8hEpi2+b/j7zt63Qtqirk43PAhf/VbfdnirpRwd8rVVXK///47/fv354UXXuDjjz/O16k+W1419Nxt9mtgkE1ePOvwydHxv+3YWHBzu3a/l9e1276+127ncjRwMzldI1prLZdcCpGNFX/s5Of1h4l092BW6FZYuxZq1SK9bDkiL8dx8dR5It2vH0HHZ/zpC16+EJsOpONoryjl6YKvhxMO9v9dTW+noJSnC2WvftBnfNiX9XalmEve3h1/6dIlXn/9db799ltq1KjBww8/nKfHz4kicWdxQeTl5YW3tzcbNmygZcuWfP/997Ru3Rpvb288PT3ZsmUL99133zXf+rNq3749kydPZsKECYAxNSSjAmE1SSlp7A2LZtd3i9iZ4MAuNz8iE9OAYhANRMdAQENIBI5GGE9yL469gpKeLvh5OFIqOQ4/fx/8SpfAr5gLpYo541fMBb9iLhR3dcTuJtM0+WH16tV069aNyMhI3n//ff73v//h4uKS73FIIsgjCQkJlCtXLnP7aoa/erI4ICCA2bNnAzBz5kz69euHu7s7QUFBeHl53XC8//3vfwwaNIjatWtjb2/PyJEj6dKlS771R4j8prUmbP02dqW58ffpaHat/5uDPhVJtbMHShvXGSam4WSveKZBGUqmhXNv3bqZz1dK4ePuRKlizvi4O990Hr4gKVWqFJUrV2blypXUq1fPtDgkEeSR9PT0bB/fsmXLDY/VqlWLvXv3AjB27FgaNWoEQFBQUOa8oIeHB99++61tghXCFtLSYOZM44KMV181HluzBg4cgFdeMbb//BOO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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(fpr, tpr, 'r:', label='Logic')\n",
    "plot_roc_curve(fpr_forest, tpr_forest,'Randomforest')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7057d8e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-12T08:11:21.920686Z",
     "start_time": "2022-01-12T08:11:21.915699Z"
    }
   },
   "source": [
    "Little difference."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13877a65",
   "metadata": {},
   "source": [
    "## SGDClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "38a8e5a2",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.585992Z",
     "start_time": "2022-01-14T07:51:39.570991Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SGDClassifier(random_state=42)"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import SGDClassifier\n",
    "\n",
    "sgd_clf = SGDClassifier(random_state = 42)  \n",
    "sgd_clf.fit(x_pre, x_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "ba3badbf",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.601950Z",
     "start_time": "2022-01-14T07:51:39.586960Z"
    }
   },
   "outputs": [],
   "source": [
    "x_SDG_predict = sgd_clf.predict(x_pre)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4cc4cbc",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-12T08:13:18.031081Z",
     "start_time": "2022-01-12T08:13:18.016121Z"
    }
   },
   "source": [
    "### Confusion matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "2ea4feab",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.617907Z",
     "start_time": "2022-01-14T07:51:39.602906Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[331, 119],\n",
       "       [ 58, 204]], dtype=int64)"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "confusion_matrix(x_labels, x_SDG_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "953907a9",
   "metadata": {},
   "source": [
    "### ROC curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "43f7bc69",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.680739Z",
     "start_time": "2022-01-14T07:51:39.618863Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.        , 0.98611111, 1.        , 0.97183099, 0.98591549,\n",
       "       0.98591549, 0.98591549, 1.        , 0.94366197, 0.97183099])"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_val_score(sgd_clf, x_pre, x_SDG_predict, cv=10) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "1d52947e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.695697Z",
     "start_time": "2022-01-14T07:51:39.681695Z"
    }
   },
   "outputs": [],
   "source": [
    "x_sgd_scores = sgd_clf.decision_function(x_pre)\n",
    "fpr_sgd, tpr_sgd, thresholds_sgd = roc_curve(x_labels, x_sgd_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "46bd6930",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.822361Z",
     "start_time": "2022-01-14T07:51:39.696698Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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6G4yMjLu3igHcycCm7pYXHXOHPj6ayKmv09yRjKO9pYv0ZCSksL48eM5dOgQS5cupXr16ixatMji7yuEpYxYPYLQC6FmPWaDcg2Y0mVKntu3bNmSXbuMVet37NjBiBEjSE5OxsXFhXnz5lG7dm3mz5/P8uXLSUpK4tixYzz++ON88sknAMybN4+JEyfi6+tLrVq1TOVaTp06xQsvvEBUVBRlypRh3rx5VKpUieeffx4XFxcOHTrEqVOnmDdvHgsWLGDr1q00b96c+ddKcufiTscsXbo0e/fupVGjRgwdOpRhw4YRFRWFq6srs2fPpk6dOixZsoRx48ZhMBhwd3dnw4YNjBkzhuTkZDZv3sw777xz31NlbSoRZDo7g5MT646vA8DNwZUrWK5w25YtWxg4cCCHDh2if//+pKWlSX0gIe5TZmYm69ev59lnnwWgTp06bNy4EXt7e9atW8eoUaNMawuEhoayd+9enJycqF27Nq+88gr29va8//777N69G09PT9q1a2da1nH48OH069eP/v37M3fuXF599VV+++03wFiL6O+//2b58uU8+uij/Pvvv3z77bc0bdqU0NBQGjRoAEC7du0wGAw4OTmxffv2Ox7zyJEjrFu3DoPBQIcOHZg5cyY1a9Zk+/btDB06lL///psPPviANWvWUKFCBSIjI3F0dOSDDz5g165dN9RKuh+2kwi05myPHlTr1o31i7tTvVR1HNIcwAKJICEhgVGjRjF9+nQqVqzI6tWreeihh8z+PkJYw718czen5ORkGjRowMmTJ2ncuLFp/YDY2Fj69+/Pf//9h1KK9OybRgE6dOhgqjPk7+/PqVOnuHz5MsHBwZQpUwYw3nx25IhxgcStW7fyS/YCOn379mXkyJGmYz366KMopQgMDMTHx4fAwEDAWM7i5MmTpkSwYcMGvL29Tfvd6Zi9evXCYDCQkJDAli1b6NWrl+m11NRUAFq3bs3zzz/PU089RadOnczwN3kr27lGsG4dFX/+mYwrlwk5GULHah0t9lZpaWksXbqUYcOGceDAAUkCQpjBtWsEp06dIi0tjVmzZgEwevRo2rVrx4EDB/jjjz9ISbleWj7nGbjBYDCNxef12lzOdteOZWdnd8Nx7ezs7mmMP+cx3dzcAON08pIlS5quLYSGhhIREQHAzJkzmTBhApGRkbRp04boaPMv7W47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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(fpr, tpr, 'r:', label='Logic')\n",
    "plt.plot(fpr_forest, tpr_forest, 'g-', label='RandomForest')\n",
    "plot_roc_curve(fpr_sgd, tpr_sgd, 'SGD')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "57ade92b",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.965936Z",
     "start_time": "2022-01-14T07:51:39.823317Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_SGD_score = cross_val_predict(sgd_clf, x_pre, x_labels, cv=5, method='decision_function')  \n",
    "precisions_SGD, recalls_SGD, thresholds_SGD = precision_recall_curve(x_labels, y_SGD_score)\n",
    "plot_precision_recall_vs_threshold(precisions_SGD, recalls_SGD, thresholds_SGD)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "efb18f39",
   "metadata": {},
   "source": [
    "## SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "7a904c12",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:39.997890Z",
     "start_time": "2022-01-14T07:51:39.966934Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SVC(C=1)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "svc = SVC(C=1)\n",
    "svc.fit(x_pre, x_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "ffda7dbb",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:43.237473Z",
     "start_time": "2022-01-14T07:51:39.998848Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'C': 1, 'degree': 1}\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "param_grid = [\n",
    "    {'degree': [1, 2, 3, 4, 5], 'C': [1,2, 3, 5]},\n",
    "]\n",
    "\n",
    "grid_search = GridSearchCV(svc, param_grid, cv = 5,\n",
    "                          scoring='neg_mean_squared_error',\n",
    "                          return_train_score=True)\n",
    "grid_search.fit(x_pre, x_labels)\n",
    "\n",
    "print(grid_search.best_params_) \n",
    "svc = grid_search.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "f4bffd88",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:43.268150Z",
     "start_time": "2022-01-14T07:51:43.238192Z"
    }
   },
   "outputs": [],
   "source": [
    "x_svc_predict = svc.predict(x_pre)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "96ff860b",
   "metadata": {},
   "source": [
    "### Confusion matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "6ea6bbfc",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:43.284070Z",
     "start_time": "2022-01-14T07:51:43.269109Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[407,  43],\n",
       "       [ 77, 185]], dtype=int64)"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "confusion_matrix(x_labels, x_svc_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6cbe550",
   "metadata": {},
   "source": [
    "### K-fold cross validation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "2db9ec73",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:43.489799Z",
     "start_time": "2022-01-14T07:51:43.285067Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.79166667, 0.86111111, 0.77464789, 0.81690141, 0.81690141,\n",
       "       0.78873239, 0.73239437, 0.83098592, 0.8028169 , 0.84507042])"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_val_score(svc, x_pre, x_labels, cv=10, scoring='accuracy')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "57e98604",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "37a8caa0",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:43.695279Z",
     "start_time": "2022-01-14T07:51:43.490519Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_svc_scores = cross_val_predict(svc, x_pre, x_labels, cv=5, method='decision_function')\n",
    "precisions_svc, recalls_svc, thresholds_svc = precision_recall_curve(x_labels, y_svc_scores)\n",
    "plot_precision_recall_vs_threshold(precisions_svc, recalls_svc, thresholds_svc)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "46e7e406",
   "metadata": {},
   "source": [
    "### ROC curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "8fd2ced8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:51:43.727245Z",
     "start_time": "2022-01-14T07:51:43.696967Z"
    }
   },
   "outputs": [],
   "source": [
    "x_svc_scores = svc.decision_function(x_pre)\n",
    "fpr_svc, tpr_svc, thresholds_svc = roc_curve(x_labels, x_svc_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "15cee158",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:54:17.945889Z",
     "start_time": "2022-01-14T07:54:17.785075Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 576x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']\n",
    "plt.figure(figsize=[8,7])\n",
    "plt.rcParams.update({\"font.size\":15})\n",
    "plt.plot(fpr, tpr, 'r:', label='Logic')\n",
    "plt.plot(fpr_forest, tpr_forest, 'g-', label='Forest')\n",
    "plt.plot(fpr_sgd, tpr_sgd, label='SGD')\n",
    "plot_roc_curve(fpr_svc, tpr_svc, 'SVC')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a977223e",
   "metadata": {},
   "source": [
    "SVC looks good."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "14d9c6ae",
   "metadata": {},
   "source": [
    "# Predict test set"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f440a1b",
   "metadata": {},
   "source": [
    "Ensemble method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "d8af39c7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:54:22.706980Z",
     "start_time": "2022-01-14T07:54:22.689990Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pclass        0.00%\n",
       "Age           0.00%\n",
       "Embarked_Q    0.00%\n",
       "Embarked_C    0.00%\n",
       "Cabin_U       0.00%\n",
       "Cabin_G       0.00%\n",
       "Cabin_FG      0.00%\n",
       "Cabin_FE      0.00%\n",
       "Cabin_F       0.00%\n",
       "Cabin_E       0.00%\n",
       "Cabin_D       0.00%\n",
       "Cabin_C       0.00%\n",
       "Cabin_B       0.00%\n",
       "Cabin_A       0.00%\n",
       "Sex_male      0.00%\n",
       "Sex_female    0.00%\n",
       "Fare          0.00%\n",
       "Parch         0.00%\n",
       "SibSp         0.00%\n",
       "Embarked_S    0.00%\n",
       "dtype: object"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "loss_rate(y_pre)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a36a53e",
   "metadata": {},
   "source": [
    "Need to fill \"Fare\", with the use of average."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "fa491fb7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:54:23.857993Z",
     "start_time": "2022-01-14T07:54:23.842907Z"
    }
   },
   "outputs": [],
   "source": [
    "y_pre['Fare'] = y_pre['Fare'].fillna(y_pre['Fare'].mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "38ca4516",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:54:25.027024Z",
     "start_time": "2022-01-14T07:54:25.012782Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pclass        0.00%\n",
       "Age           0.00%\n",
       "Embarked_Q    0.00%\n",
       "Embarked_C    0.00%\n",
       "Cabin_U       0.00%\n",
       "Cabin_G       0.00%\n",
       "Cabin_FG      0.00%\n",
       "Cabin_FE      0.00%\n",
       "Cabin_F       0.00%\n",
       "Cabin_E       0.00%\n",
       "Cabin_D       0.00%\n",
       "Cabin_C       0.00%\n",
       "Cabin_B       0.00%\n",
       "Cabin_A       0.00%\n",
       "Sex_male      0.00%\n",
       "Sex_female    0.00%\n",
       "Fare          0.00%\n",
       "Parch         0.00%\n",
       "SibSp         0.00%\n",
       "Embarked_S    0.00%\n",
       "dtype: object"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "loss_rate(y_pre)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "00b28c21",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:54:26.179047Z",
     "start_time": "2022-01-14T07:54:26.147835Z"
    }
   },
   "outputs": [],
   "source": [
    "y_predict = forest_clf.predict(y_pre)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "098bbc00",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:54:27.361984Z",
     "start_time": "2022-01-14T07:54:27.347024Z"
    }
   },
   "outputs": [],
   "source": [
    "submission = pd.DataFrame(np.c_[test_id, y_predict], columns=['PassengerId', 'Survived'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "f4ec5958",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2022-01-14T07:54:28.485023Z",
     "start_time": "2022-01-14T07:54:28.473053Z"
    }
   },
   "outputs": [],
   "source": [
    "submission.to_csv(r'E:\\kaggle竞赛\\泰坦尼克\\submission.csv', index = False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "573.6px",
    "left": "1214.72px",
    "top": "136.062px",
    "width": "303.675px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
